实际上可以用平衡树做的但是不喜欢平衡树。
还是喜欢可爱的线段树,于是打了一发线段树合并。很久没有这样子的做题感觉了,真是美妙,思路清晰,交上去一遍过(窝不会告诉泥萌窝第一次交的时候忘关文件=。=)。
我们对于每一个点维护一个权值线段树,然后用并查集维护点与点之间的联通关系。对于一个连通块,该连通块的所有结点信息都保留在该连通块的 $root$ 上。
这样子我们合并两个岛的时候 $x,y$ ,可以直接将 $x$ 所在连通块的 $root$ (简称 $fx$ ) 和 $y$ 所在连通块的 $root$ (简称 $fy$ ) 合并起来,也就是将 $fy$ 的线段树并到 $fx$ 上去。这样子 $fx$ 就维护了这两个连通块的信息了,最后我们按照并查集的套路将 $fy$ 的父亲设为 $fx$ 即可。
询问就是基础操作,权值线段树就像主席树那样询问即可。
Code:
1 |
|
本文标题:【题解】 [HNOI2012]永无乡 线段树+启发式合并 luoguP3224
文章作者:Qiuly
发布时间:2019年04月04日 - 00:00
最后更新:2019年04月04日 - 16:32
原始链接:http://qiulyblog.github.io/2019/04/04/[题解]luoguP3224/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。